import 'package:get/get.dart';
import '../../../function/state/user_state.dart';
import '../../../function/state/post_state.dart';
import '../../../function/state/like_state.dart';
import '../../../function/state/comment_state.dart';
import '../../../function/model/post_model.dart';
import '../../../function/model/user_model.dart';
import '../../../function/widgets/login_dialog_widget.dart';

/// 首页逻辑控制器
/// 使用GetX进行页面逻辑分离
class LandingPageController extends GetxController {
  // 页面标题
  final RxString pageTitle = 'Home'.obs;

  // 轮播图当前页面索引
  final RxInt currentCarouselIndex = 0.obs;

  // 用户状态管理
  final UserState userState = Get.find<UserState>();

  // 帖子状态管理
  final PostState postState = Get.find<PostState>();

  // 点赞状态管理
  final LikeState likeState = Get.find<LikeState>();

  // 评论状态管理
  final CommentState commentState = Get.find<CommentState>();

  @override
  void onInit() {
    super.onInit();
    // 初始化首页数据
    _initializePageData();
  }

  /// 初始化页面数据
  void _initializePageData() {
    // 只有在用户已登录时才设置用户ID
    if (userState.isLoggedIn && userState.currentUser != null) {
      likeState.setCurrentUserId(userState.currentUser!.id);
      commentState.setCurrentUserId(userState.currentUser!.id);
    }
  }

  /// 更新用户相关的依赖状态
  void _updateUserDependencies() {
    if (userState.isLoggedIn && userState.currentUser != null) {
      likeState.setCurrentUserId(userState.currentUser!.id);
      commentState.setCurrentUserId(userState.currentUser!.id);
    } else {
      // 用户登出时清空用户ID
      likeState.setCurrentUserId('');
      commentState.setCurrentUserId('');
    }
  }

  /// 获取图片类型的帖子（最多5条）
  List<PostModel> getImagePosts() {
    return postState.allPosts
        .where((post) => post.resourceType == ResourceType.image)
        .take(5)
        .toList();
  }

  /// 切换轮播图页面
  void changeCarouselPage(int index) {
    currentCarouselIndex.value = index;
  }

  /// 点赞帖子
  void togglePostLike(String postId) {
    // 更新用户依赖状态
    _updateUserDependencies();

    // 检查用户是否已登录
    if (!userState.isLoggedIn) {
      // 用户未登录，弹出登录对话框
      LoginDialogUtils.showLoginDialog();
      return;
    }

    // 用户已登录，根据点赞状态进行切换
    if (likeState.isPostLiked(postId)) {
      likeState.unlikePost(postId);
    } else {
      likeState.likePost(postId);
    }
  }

  /// 获取用户信息
  UserModel? getUserById(String userId) {
    return userState.getUserById(userId);
  }

  /// 获取帖子评论数
  int getPostCommentCount(String postId) {
    return commentState.getPostComments(postId).length;
  }

  /// 显示登录对话框
  void showLoginDialog() {
    LoginDialogUtils.showLoginDialog();
  }

  /// 处理登出
  void handleLogout() {
    userState.logout();
  }

  /// 导航到用户资料页面
  void navigateToUserProfile(String userId) {
    // 检查是否是自己
    if (userState.isLoggedIn &&
        userState.currentUser != null &&
        userState.currentUser!.id == userId) {
      return;
    } else {
      // 跳转到他人页面
      final user = userState.getUserById(userId);
      if (user != null) {
        Get.toNamed('/other-profile', arguments: user);
      }
    }
  }
}
